home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
MCASM.RAR
/
MC_ASM.EXE
/
WROX_ASM
/
CH12
/
EFFECTS
/
EFFDEMO.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-02
|
4KB
|
215 lines
#include <stdio.h>
#include <stdlib.h>
#include <mem.h>
#include <dos.h>
#include <conio.h>
#include "screff.h"
#include "paleff.h"
#define WORD unsigned int
#define BYTE unsigned char
void mdelay(void);
void CreateEmptyPic(void* &p);
void LoadBMPFile(char *bmpname,void* &imageptr,VGApalette &palptr);
void main(int argc,char **argv)
{
void *v,*p,*p1,*p2,*p3;
VGApalette pal;
long fsize;
int i,j;
randomize();
asm {
mov ax,0x13
int 0x10
}
v = MK_FP(0xA000,0);
if (argc < 4) exit;
LoadBMPFile(argv[1],p,pal);
LoadBMPFile(argv[2],p1,pal);
LoadBMPFile(argv[3],p2,pal);
CreateEmptyPic(p3);
setDACblock(0,256,pal);
ShowFromCenter(0,0,319,199,0,p,v);
mdelay();
ShowFromCenter(0,0,319,199,0,p1,v);
mdelay();
ShowFromCenter(0,0,319,199,0,p3,v);
mdelay();
ShowFromCenter(0,0,319,199,1,p2,v);
mdelay();
CenterExplode(0,0,319,199,2,p1,NULL,v);
mdelay();
ShowToCenter(0,0,319,199,0,p,v);
mdelay();
Jalousie(0,0,319,199,30,0,p1,v);
mdelay();
RandomFillArea(0,0,319,199,5,5,p2,v);
mdelay();
RandomFillArea(0,0,319,199,2,50,p,v);
mdelay();
BadFAX(0,0,319,199,25,0,p1,v);
mdelay();
BadFAX(0,0,319,199,15,1,p2,v);
mdelay();
for(i=0;i<=7;i++) RandomFillArea(i*40,0,i*40+39,199,2,40,p,v);
mdelay();
Develope(0,0,319,199,111,p1,v);
mdelay();
Explode(0,0,319,199,p2,v);
mdelay();
ShowFromCorner(0,0,319,199,20,0,p1,v);
mdelay();
ShowFromCorner(0,0,319,199,20,1,p2,v);
mdelay();
ShowFromCorner(0,0,319,199,20,2,p,v);
mdelay();
ShowFromCorner(0,0,319,199,20,3,p2,v);
mdelay();
Gone_with_the_wind(0,0,319,199,p2,p1,v);
mdelay();
Slide(0,0,319,199,1,0,p2,v);
mdelay();
Slide(20,20,300,159,2,1,p,v);
mdelay();
Slide(40,30,250,168,1,3,p2,v);
mdelay();
Slide(0,0,319,199,3,3,p1,v);
mdelay();
for(i=0;i<=9;i++) Slide(50,i*20,300,i*20+19,1,2,p,v);
mdelay();
for(i=0;i<=9;i++) Slide(i*32,0,i*32+31,199,2,0,p2,v);
mdelay();
for(i=9;i>=0;i--) Slide(i*32,0,i*32+31,199,2,0,p1,v);
mdelay();
for(i=0;i<=3;i++) CenterExplode(i*80,0,i*80+79,199,2,p1,p2,v);
mdelay();
CenterExplode(0,0,319,199,2,p,NULL,v);
mdelay();
for(i=0;i<=19;i++)
if (i%2 == 0) Slide(i*16,0,i*16+15,199,2,0,p1,v);
else Slide(i*16,0,i*16+15,199,2,1,p1,v);
mdelay();
for(i=0;i<=199;i++)
for(j=0;j<=319;j++)
if ((i+j)%2 == 0) *&MixBuffer(v)[i][j]=*&MixBuffer(p1)[i][j];
else *&MixBuffer(v)[i][j]=*&MixBuffer(p2)[i][j];
mdelay();
Develope(0,0,319,199,127,p1,v);
mdelay();
Gone_with_the_wind(0,0,319,199,p1,p3,v);
mdelay();
Gone_with_the_wind(0,0,319,199,p3,p2,v);
mdelay();
/*colwheeldemo1(v);
getch();
colwheeldemo2(v);
getch();*/
textmode(C80);
printf(" That's all folks !");
}
void mdelay(void) { delay(1000); }
void CreateEmptyPic(void* &ptr)
{
if ((ptr = malloc(64000)) == NULL )
{
printf("Not enough memory to allocate buffer\n");
exit(1); //terminate program if out of memory
}
memset(ptr,0,64000);
}
typedef struct {
WORD bf_type; //Bit Map
long bf_size; //size of file in DWORD
WORD bf_reserved1, bf_reserved2;
long bf_offbits; //image start offset in byte
} bmp_file_header;
typedef struct {
long bi_size;
long bi_width;
long bi_height;
WORD bi_planes;
WORD bi_bit_count;
long bi_compression;
long bi_size_image;
long bi_xpels_per_meter;
long bi_ypels_per_meter;
long bi_clr_used;
long bi_clr_important;
} bmp_file_info_header;
typedef BYTE bmp_palette[256][4];
void LoadBMPFile(char *bmpname,void* &imageptr,VGApalette &palptr)
{
FILE *fbmp;
bmp_file_header bmpheader;
bmp_file_info_header bmpinfo;
bmp_palette palbmp;
int DX,DY,i,Rest;
if ((fbmp = fopen(bmpname, "rb")) == NULL)
{
printf("Cannot open bmp file.\n");
exit;
}
fread(&bmpheader,sizeof(bmpheader),1,fbmp);
fread(&bmpinfo,sizeof(bmpinfo),1,fbmp);
fread(palbmp,sizeof(palbmp),1,fbmp);
for(i=0;i<=255;i++)
{
palptr[i].r = palbmp[i][2]/4;
palptr[i].g = palbmp[i][1]/4;
palptr[i].b = palbmp[i][0]/4;
}
DX = bmpinfo.bi_width;
DY = bmpinfo.bi_height;
Rest = (bmpheader.bf_size-bmpheader.bf_offbits)/bmpinfo.bi_height;
Rest = Rest - bmpinfo.bi_width;
if ((long)DX*DY > 64000) exit(1);
if ((imageptr = malloc(64000)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); // terminate program if out of memory
};
memset(imageptr,0,64000);
for(i=DY-1;i>=0;i--)
{
fread(MixBuffer(imageptr)[i],DX,1,fbmp);
fseek(fbmp,Rest,SEEK_CUR);
}
fclose(fbmp);
}